package ace.cmp.data.methodname.method.name.sql.core.resolver;

import ace.cmp.data.methodname.method.name.sql.core.enums.SqlCommandTypeEnum;
import java.util.Optional;

/**
 * @author caspar
 * @date 2023/2/18 11:17 从方法名中解析对象信息
 * 例子：findTop10FindIdAndOrderByAndTopNameDistinctAndOrderByByIdAndMobileOrderByNameDesc
 * 结果：findTop10FindIdAndOrderByAndTopNameDistinctAndOrderByBy的关键信息，Top,First,Distinct,操作的命令类型
 */
public interface MethodNameToSubjectResolver {
  /**
   * 获取解析的方法
   *
   * @return
   */
  String getMethodName();

  /**
   * 从方法名中解析出, sql command type {@link SqlCommandTypeEnum}
   *
   * @return sql command type {@link SqlCommandTypeEnum}
   */
  SqlCommandTypeEnum getSqlCommandType();

  /**
   * 从方法名中解析列字符串
   * 例子：findTop10FindIdAndOrderByAndTopNameDistinctAndOrderByByIdAndMobileOrderByNameDesc
   * 结果：findTop10FindIdAndOrderByAndTopNameDistinctAndOrderByBy
   *
   * @return 列字符串, 会包含其它关键字如：Distinct,First,Top，空或null代表全部
   */
  String getSubjectSourceString();

  /**
   * 从方法名中解析top ,first 关键字信息
   *
   * @return top ,first 关键字信息
   */
  Optional<Integer> getTopNumber();

  /**
   * 从方法名中解析Distinct关键字
   *
   * @return
   */
  Boolean getDistinct();
}
